GitHub にアップロードする (git push)
(この操作をするためには SSHキーの登録が必要です。 SSHキーの生成を参照して設定してください。) ブランチを切る (git branch, git switch) まではローカル環境での Git 操作をしてきました。本記事ではリポジトリを GitHub に代表される Git ホスティングサービスにアップロードする操作を説明します。 Git ホスティングサービスのリポジトリに変更履歴をアップロードする操作をプッシュ (push) すると言います。「add -> commit -> push」の流れの「push」にあたります。 ローカルリポジトリとリモートリポジトリ
push の操作をする前に「ローカルリポジトリとリモートリポジトリ」の説明をします。リポジトリは目的や用途によって名前が細分化されます。Gitとは何か でもローカルリポジトリとリモートリポジトリについて軽く触れましたが、改めてここで説明します(内容は同一です)。 各PCごとに作成・保持されるリポジトリをローカルリポジトリと呼びます。 対して、GitHub, GitLab などをはじめとする Gitホスティングサービス で管理されるリポジトリをリモートリポジトリと呼びます。リモートリポジトリは1つのプロジェクトに対して基本的に1つです (フォークした場合や複数のホスティングサービスにリポジトリが存在する場合はリモートリポジトリが複数存在しますが、はじめはその考えで良いでしょう)。リモートリポジトリはすべてのローカルリポジトリの変更を統合・管理します。一方、ローカルリポジトリは実際に作業を行った変更履歴を保存します。この変更履歴をリモートリポジトリにアップロード (push) したりダウンロード (pull, fetch) したりすることで、ファイルの共有・同期を行います。
https://gyazo.com/cc97ee1a31f537da414d7b599c905f89
パブリックリポジトリとプライベートリポジトリ
リモートリポジトリを作成するとき、パブリックリポジトリとプライベートリポジトリのどちらかを作成することができます。
パブリックリポジトリは公開されたリポジトリです。どんな人でもリポジトリを閲覧することができます。またリポジトリを自分のリポジトリとしてコピーしたりする (fork) ことができます。fork したリポジトリを更新して、元のリポジトリに変更リクエストを送る (Pull Request or Merge Request) こともできます。
プライベートリポジトリは非公開のリポジトリです。基本的には作った本人しか見ることができません。共同編集者 (GitHub では collaborators と呼びます) を登録することで非公開にしつつ、複数人でリポジトリを共有できます。
パブリックリポジトリ、プライベートリポジトリ共に編集ができる人はリポジトリを作った本人のみです。他の人が編集できるようにするには共同編集者に登録する必要があります。
GitHubでは Organization という機能があります。Organization に対し書き込み権限を持っていれば、その Organization で管理されているすべてのリポジトリを編集することができます。この場合はリポジトリごとに共同編集者を追加する必要はありません。なお、GitHub以外の Git ホスティングサービスでも同様の機能は存在しているケースは多いです (有料のケースも存在します)。
リモートリポジトリを作成する
(キャプチャ画面は2020年10月現在のものです。)
push するためのリモートリポジトリを作成します。本記事では GitHub を採用していますので、そちらにリポジトリを作成します。GitHub にアクセスしてログインしてください。アカウントがない場合は作成してください (無料で作成できます)。 1. ログインし、GitHub にアクセスします。画面左上の「New」をクリックします https://gyazo.com/fbaac37bde0a85fa3c3b4765aecf75ac
2. ①Repository template は No template を選択します。②Owner は自身のアカウントを選択します。③Repository name は 今回は 「git-sample」と入力します。④public を選択するとパブリックリポジトリが private を選択するとプライベートリポジトリが作成されます。任意で選択します。⑤Add a README file, Add .gitignore, Choose a license のチェックボックスは今回は選択しません。既にローカルリポジトリが存在する場合は、空のリモートリポジトリでなければならないことを覚えておきましょう。
https://gyazo.com/da8719b893e46469d42cda9194406e05
3. リモートリポジトリが作成されます。図のような画面に遷移します。
https://gyazo.com/072c8397353ffad0ef727a63a886932d
リモートリポジトリとローカルリポジトリを紐づける
リモートリポジトリとローカルリポジトリを紐づけるには2つの方法が存在します。1つ目は git remote コマンドでローカルリポジトリにリモートリポジトリを紐づける方法です。もう一つはgit cloneコマンドでリモートリポジトリを新たなローカルリポジトリとしてコピーする (clone する) 方法です。こちらの方法は リモートリポジトリから新たなローカルリポジトリを作成する (git clone) で説明します。 git remote は先にローカルリポジトリが作成されている場合に採用します。ローカルリポジトリの内容をリモートリポジトリに同期するため、リモートリポジトリに何かファイルが存在するとエラーが発生します。先ほど説明した、既にローカルリポジトリが存在する場合は、空のリモートリポジトリでなければならない理由はこれです。
git clone はリモートリポジトリを先に作成した場合や既にファイルが存在しているリモートリポジトリを編集する場合に採用します。ほとんどの場合はこちらを採用します。
1. ブランチ名を変更する
ディレクトリに移動後、ターミナル上で以下を実行します。2020年10月現在、GitHub のデフォルトブランチは main であるのでブランチ名を変更します。空のリポジトリに初めてプッシュするときはデフォルトブランチに対してプッシュしないといけないからです。
code: masterブランチをmainブランチに変更.sh
$ git branch -M main
2. リモートリポジトリを紐づける
以下のコマンドでローカルリポジトリにリモートリポジトリを登録します。URLはSSH用のものをコピーしましょう (git@github.com ~~~ .git である URLです)。
code: リモートリポジトリを紐づける.sh
$ git remote add origin ${リポジトリのURL}
リモートリポジトリを origin という名前で登録しました。push 等の Git ホスティングサービスと通信する Git 操作をするときはこの名前を使います。 慣習的に origin としますが、任意の名前を指定できます。しかしながらコマンドをコピペする関係で origin 以外の名前を使うことはほとんどありません。
正しく登録されたか以下のコマンドで確認します。実行例も記載します。
code: 登録の確認.sh
$ git remote -v
origin ${リポジトリのURL} (fetch)
origin ${リポジトリのURL} (push)
プッシュする
いよいよプッシュするときがやってきました。「add -> commit -> push」が完成するときです。
冒頭でプッシュは Git ホスティングサービスのリポジトリに変更履歴をアップロードする操作と説明しました。もう少し詳しく説明すると、ローカルリポジトリのブランチのコミットをリモートリポジトリのブランチに反映させる操作をプッシュといいます。つまりブランチのコミット単位で更新します。
1. プッシュする
プッシュするには以下のコマンドを実行します。オプションの -u をつける必要はありませんが、次回以降のプッシュ時には引数なしで実行できるためつけておくと便利です (このように設定されたブランチを上流ブランチと呼びます) 。
code: プッシュする.sh
# 基本的なpush
$ git push origin ${ブランチ名}
# 上流ブランチを設定する場合のpush
$ git push -u origin ${ブランチ名}
# 次回以降は以下でOK
$ git push
今回は以下のようにコマンドを実行します。
code:実際に実行するpush コマンド.sh
$ git push -u origin main
Enter passphrase for key '${SSHキーのパス}':
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (7/7), 616 bytes | 123.00 KiB/s, done.
Total 7 (delta 0), reused 0 (delta 0)
To ${リモートリポジトリのURL}
コマンドを実行するとSSHキーのパスワードを求められます。SSHキーの生成で設定したパスワードを入力します。 2. GitHub 上で更新を確認する
先程のページ (リポジトリのページ) をリロードすると以下のように表示されると思います。main ブランチのファイルがアップロードされていれば成功です。
https://gyazo.com/b4ec0b54ee681d317ea869f2f7728bf1
また、「X commits」というリンクをクリックすると、コミット履歴が Web 上で確認できます。
https://gyazo.com/b4ec0b54ee681d317ea869f2f7728bf1